# 多态是指一个对象可以以多种形态去呈现
# 定义两个类
class A:
    def __init__(self, name):
        self._name = name

    # 装饰器用property
    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, name):
        self._name = name


class B:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, name):
        self._name = name


a = A("孙悟空")
b = B("猪八戒")


# 定义一个函数
def say_hello(obj):
    print(f"你好 {obj.name}")


# 对于say_hello()，只要有name属性，那么就可以接受传递的实例
# 没有考虑传递的类型，这里就体现了多态性


def say_hello2(obj):
    # 做类型的检查
    if isinstance(obj, A):
        print(f"你好 {obj.name}")


# 这里就违反了多态性，只适用于指定的类型的对象
say_hello2(a)
